package userservice

import (
	"encoding/json"
	"gitee.com/go-mid/booter/web"
)

type EnumUserState int

const (
	//正常
	EnumUserState_NORMAL EnumUserState = 1
	//注销
	EnumUserState_LOGOFF EnumUserState = 2
)

type EnumRegisterStatus int

const (
	//游客
	EnumRegisterStatus_Guest EnumRegisterStatus = 0
	//注册用户
	EnumRegisterStatus_Register EnumRegisterStatus = 1
)

type EnumLoginidType int

const (
	//通用的第三方账号
	EnumLoginidType_ThirdParty EnumLoginidType = 1
	//账号密码
	EnumLoginidType_AccountPasswd EnumLoginidType = 2
	//手机号
	EnumLoginidType_PHONE EnumLoginidType = 3
	//微信
	EnumLoginidType_Wechat EnumLoginidType = 4
	//dapp钱包地址
	EnumLoginidType_DappAddress EnumLoginidType = 5
)

type EnumLoginCodeType int

const (
	//密码
	EnumLoginCodeType_Passwd EnumLoginCodeType = 1
)

type EnumLoginidState int

const (
	//正常
	EnumLoginidState_NORMAL EnumLoginidState = 1
	//解除关系
	EnumLoginidState_UNBIND EnumLoginidState = 2
)

type EnumUserAttrType int

const (
	//字符串
	EnumUserAttrType_String EnumUserAttrType = 1
	//数字
	EnumUserAttrType_Int EnumUserAttrType = 2
	//hash值，如密码， hash值不能找到原始值
	EnumUserAttrType_Hash EnumUserAttrType = 3
	//加密值，如手机号，加密值可以解密出原始值，
	EnumUserAttrType_Encry EnumUserAttrType = 4
)

type LoginCode struct {
	//登录校验码 可以是短信验证码、密码等跟当前登录类型关联的校验码
	LoginCode string `json:"login_code"`
	//登录校验类型
	LoginCodeType EnumLoginCodeType `json:"login_code_type"`
}

type LoginID struct {
	//登录唯一标识类型
	LoginidType EnumLoginidType `json:"loginid_type"`
	//登录唯一标识， 如： 手机号，微信uninonid
	Loginid string `json:"loginid"`
	//用户池id
	UserPoolID int64 `json:"user_pool_id"`
	//appid
	Appid int64 `json:"appid"`
}

type Avatar struct {
	Origin string `json:"origin"` // 头像原图
	Tiny   string `json:"tiny"`   // 头像缩略图
}

func (m Avatar) FromJsonString(jsonString string) {
	json.Unmarshal([]byte(jsonString), &m)
}
func (m Avatar) ToJsonString() string {
	d, _ := json.Marshal(m)
	return string(d)
}

type EventUserUpdate struct {
	//注册后的uid
	UserId int64 `json:"user_id"`
	//修改的属性
	Attr     string `json:"attr"`
	OldValue string `json:"old_value"`
	NewValue string `json:"new_value"`
	//事件发生的时间戳
	Timestamp int64 `json:"timestamp"`
}

func (EventUserUpdate) Topic() string {
	return "persistent://base/user/user_update"
}

type EventRegister struct {
	//注册后的uid
	NewUserId int64 `json:"new_user_id"`
	//注册的请求信息
	RegisterParam
	//事件发生的时间戳
	Timestamp int64 `json:"timestamp"`
}

func (e *EventRegister) String() string {
	s, _ := json.Marshal(e)
	return string(s)
}

type EventLogin struct {
	//登录的请求信息
	LoginParam
	//事件发生的时间戳
	Timestamp int64 `json:"timestamp"`
}

func (e *EventLogin) String() string {
	s, _ := json.Marshal(e)
	return string(s)
}

type RegisterParam struct {
	//登录标识
	LoginID
	//使用该uid注册。如果该uid为游客，则使用该uid，否则生成新的uid
	UserId         int64              `json:"userId"`
	RegisterStatus EnumRegisterStatus `json:"register_status" bdb:"register_status"` //状态:0 游客, 1注册用户
	//注册时的客户端信息
	ClientInfo web.XFRMClientInfo `json:"client_info"`
	//认证类型
	AuthType web.EnumAuthType `json:"auth_type"`
	//校验码类型，如：密码
	LoginCode
}
type BindParam struct {
	//登录标识
	Loginid string `json:"loginid"`
	//登录标识类型
	LoginidType EnumLoginidType `json:"loginid_type"`
	//登录的uid
	UserId int64 `json:"user_id"`
}
type LoginParam struct {
	//登录标识
	LoginID
	//登录的uid
	UserId int64 `json:"user_id"`
	//注册时的客户端信息
	ClientInfo web.XFRMClientInfo `json:"client_info"`
	//认证类型
	AuthType web.EnumAuthType `json:"auth_type"`
}
